﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ApuestasJMG.GUI.Contrato;
using Logica.Comandos;
using Datos.Entidades;
using Logica.FabricaLogica;
using Datos.Entidades.FabricaEntidades;
using Subgurim.Controles;
using Logica.Fabricas;




namespace ApuestasJMG.GUI.Presentador
{
    public class PresentadorRegistroMaquinaLocation
    {


        #region Atributos

        private IContratoRegistroMaquinaLocation _vista;
        double lat, lng;

        #endregion
        #region Constructores

        /// <summary>
        /// Constructor que inicializa el atributo vista
        /// </summary>
        /// <param name="vista">Objeto de tipo Interfaz</param>
        public PresentadorRegistroMaquinaLocation(IContratoRegistroMaquinaLocation vista)
        {
            this._vista = vista;
        }

        #endregion

        #region Metodos




        /// <summary>
        /// Código a ejecutar cuando el usuario presiona el botón Crear
        /// para crear una nueva Categoria
        /// </summary>
        /// <returns>Si la operación fue exitosa o no</returns>
        public string ClickAceptar(GLatLng puntero)
        {
            if (puntero != null)
            {
                lat = puntero.lat;
                lng = puntero.lng;
            }
            else 
            {
                lat = 10.463757868363302;
                lng = -66.97772026062011;

            }

            Entidad maquina = FabricaEntidades.ObtenerMaquina();
            (maquina as Maquina).NombreLocal = _vista.NombreLocal.Text;
            (maquina as Maquina).Ciudad = _vista.Ciudad.Text;
            (maquina as Maquina).Estado = _vista.Estado.Text;
            (maquina as Maquina).Estatus1 = 1;
            (maquina as Maquina).Calle = _vista.Calle.Text;
            (maquina as Maquina).Altitud = "0";
            (maquina as Maquina).Telefono = _vista.Telefono.Text;
            (maquina as Maquina).Latitud = (decimal)lat;
            (maquina as Maquina).Longitud = (decimal)lng;
            (maquina as Maquina).Piso = _vista.Correo.Text;

            Comando comando = FabricaComandoMaquina.CrearComandoCrearMaquina(maquina);
            comando.Ejecutar();
            if (!comando.Flag)
                return "No se ha podido crear la maquina!";
            else

                return "La maquina fue creado con éxito!";
        }

        /// <summary>
        /// Metodo que genera el mapa configurando sus controles gráficos
        /// </summary>
        /// <param name="lat">Latitud en el Mapa</param>
        /// <param name="lng">Longitud en el Mapa</param>
        /// <returns></returns>
        private GMap ObtenerMapa(double lat, double lng)
        {

            GMap mapa = _vista.GoogleMap;
            mapa.Key =
                "ABQIAAAAmOYYhuw49CfNIcF4TCfHchRXA9H1-73k1MkKjp_pA8g760BL1xR0AZhsBh9TY7i6ZDOxRf-Qd09hnA";

            mapa.addControl(new GControl(GControl.preBuilt.MapTypeControl));
            mapa.addControl(new GControl(GControl.preBuilt.MapTypeControl));
            mapa.addControl(new GControl(GControl.preBuilt.LargeMapControl));
            mapa.setCenter(new GLatLng(lat, lng), 13);
            mapa.Width = 400;
            mapa.Height =300;
            mapa.enableHookMouseWheelToZoom = true;
            mapa.enableGKeyboardHandler = true;
            mapa.enableDoubleClickZoom = true;
            mapa.enableContinuousZoom = true;
            mapa.enableDragging = true;
            mapa.GZoom = 15;

            return mapa;

        }

        /// <summary>
        /// Metodo que hace la asignación de valores para la generación del mapa y el pin
        /// </summary>
        public void CargarMapa()
        {

            lat = 10.463757868363302;
            lng = -66.97772026062011;

            GLatLng coordenadas = new GLatLng(lat, lng);
            GMap mapa = ObtenerMapa(lat, lng);
            Comando comando = FabricaComandoGoogleMap.ObtenerComandoPropPinGoogleMap(true);
            comando.Ejecutar();
            //Configuración del pin en el mapa
            GMarkerOptions prop = comando.GMa; // FabricaComandoGoogleMap.ObtenerComandoPropPinGoogleMap(true);

            GMarker pin = new GMarker(coordenadas, prop);
            GInfoWindow window = new GInfoWindow(pin, "<center><b>Ucab</b></center>", true);
            mapa.addInfoWindow(window);

            // Activa el listener para el evento de arrastre del pin en el mapa
            mapa.addListener(new GListener(pin.ID, GListener.Event.dragend,
             string.Format(@"
               function(overlay, point)
               {{
                  var ev = new serverEvent('Arrastre', {0});
                  ev.addArg(this.getPoint());
                  ev.send();
               }}
               ", mapa.GMap_Id)));

        }
    }
        #endregion
}
